﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Entidades;
using DAO;

namespace Negocio
{
    public class CuentaCorrienteRules
    {
        private CuentaCorrienteDAO dao;

        public CuentaCorrienteRules()
        {
            dao = new CuentaCorrienteDAO();
        }

        public List<CuentaCorrienteEntity> ObtenerCtaCteDeUsuario(int idUsuario)
        {
            return dao.ObtenerMovimintosCtaCteByUsuario(idUsuario);
        }

        public List<CuentaCorrienteEntity> ObtenerTodas()
        {
            return dao.SelectAll();
        }

        public int CrearMovimientoEnCuenta(CuentaCorrienteEntity ctacte, int idTipoMovimiento)
        {
            float saldoAnterior = dao.ObtenerSaldoAnterior(ctacte.Usuario.Id);

            if ((idTipoMovimiento == (int)EnumTipoMovimiento.Debitar) && ((saldoAnterior - ctacte.MontoMovimiento) < 0))
            {
                throw new Exception("No puede realizar un moviento que de saldo negativo.");
            }

            if (idTipoMovimiento == (int)EnumTipoMovimiento.Acreditar)
            {
                ctacte.Descripcion = EnumTipoMovimiento.Acreditar.ToString();
                ctacte.Saldo = saldoAnterior + ctacte.MontoMovimiento;
            }
            else
            {
                ctacte.Descripcion = EnumTipoMovimiento.Debitar.ToString();
                ctacte.Saldo = saldoAnterior - ctacte.MontoMovimiento;                               
            }

            return dao.Insert(ctacte);
        }

        public List<CuentaCorrienteEntity> ObtenerPorFiltro(string fechaDesde, string fechaHasta, int idUsuario, string conceptoMovimiento)
        {
            DateTime? desde = null;
            DateTime? hasta = null;
            int? id = null;
            string concepto = null;

            if (!String.IsNullOrEmpty(fechaDesde))
	        {
		        desde = DateTime.Parse(fechaDesde);
	        }

            if (!String.IsNullOrEmpty(fechaHasta))
	        {
                hasta = DateTime.Parse(fechaHasta);
	        }

            if (idUsuario == 0)
            {
                id = null;
            }
            else
            {
                id = idUsuario;
            }

            if (!String.IsNullOrEmpty(conceptoMovimiento))
            {
                concepto = conceptoMovimiento;
            }

            return dao.ObtenerPorFiltro(desde, hasta, id, concepto);
        }
    }
}
